// OpenCL kernel to perform an element-wise addition
const char* programSource =
__kernel
void realTime(__global float *Foil, //input
              __global float *Result, //output
              int N)
{                  
    // Get global position Y                        
    int col = get_global_id(1);                     
    // Get global position X                        
    int row = get_global_id(0);
    
    /*Cargo todos los valores de la matriz original en la temporal*/
    Result[row * N + col] = Foil[row * N + col];
    
    barrier(clk_global_mem_fence);
    
    /*Si es una fuente de calor no evaluo*/
    if(Foil[row * N + col]==0){
        float tempSum = temp[row * N + col];
        int neighborhood = 5; /*Cada casillero tiene al menos 3 vecinos*/

        /*Se fija si hay un superior*/
        if(row==0){
            neighborhood--;
        }else{
            tempSum += temp[(row - 1) * N + col];
        }

        /*Se fija si hay un inferior*/
        if(row==N){
            neighborhood--;
        }else{
            tempSum += temp[(row + 1) * N + col];
        }

        /*Se fija si hay un vecino a la izquierda*/
        if(col==0){
            neighborhood--;
        }else{
            tempSum += temp[row * N + col - 1];
        }

        /*Se fija si hay un vecino a la derecha*/
        if(col==N){
            neighborhood--;
        }else{
            tempSum += temp[row * N + col + 1];
        }

        tempResult = tempSum/neighborhood;
        
        Result[row * N + col] = tempResult;
    }
    
}